1. Field of the Invention
The techniques described herein relate generally to name spaces employed in computer systems and more specifically to the incorporation of one name space into another name space.
2. Description of the Prior Art
Many of the entities available to a program executing on a computer system have names, i.e., identifiers which are not addresses but which may nevertheless be used by a program to locate the entity specified by the identifier. The computer system's operating system includes components which permit the user to name entities, which keep track of the relationships between names and entities, and which permit the user to locate the entity by means of its name.
Files are common examples of such named entities. The file system component of the operating system permits the user to give a file a character-string name and to locate the file using the character-string name. Other named entities may be devices such as terminals or printers. The set of names which a program may use to locate entities is termed the name space in which the program executes. The operating system determines how the name space is organized. In some cases, the name space is fiat, that is, all names are on a single level. In other cases, the operating system organizes the names into hierarchies. A common form of hierarchical organization is the single tree. All of the names in the name space are organized into a tree with a single root. Names at interior nodes of the tree represent directories; names at leaf nodes represent ordinary entities. To locate an entity or directory in such a tree, a program specifies the name of the entity or directory and the names of all of the directories between the root of the tree and the entity or directory or the name of the entity or directory and the names of all of the directories between the process's current directory and the entity or directory. The combination of names necessary to locate the entity is termed the entity's path name.
In the past, name spaces have generally been per-system. Any program operating on a system could locate any named entity in the system. An example of such a per-system name space is that provided by a computer running the wellknown UNIX.TM. operating system. All of the files provided by the UNIX operating system are organized into a single tree, and a program may locate any file in the system by specifying the file's path name in the tree. An advantage of this form of organization was that entities used by all programs, such as the executable code for the operating system or other utilities, could be made available to all programs by putting them in at predetermined places in the name space. Indeed, if two systems shared the same naming conventions for those predetermined places, a program which executed on one UNIX system would execute on another. For example, in UNIX systems, commonly-used utility programs are generally kept in the directory which is accessible by the path name/bin.
Originally, computer systems were independent entities. They could be connected by communications media, but the connected systems did not form a single system. As communications media have improved and the price of processors and memory have dropped, distributed computer systems have arisen. In these systems, a set of processors, display devices, and file storage devices which are connected by communications media form a single system. An advantage of a distributed system is that there is no logical limit to system size. While current distributed systems typically consist of a set of work stations which are connected via a local area network to each other and to a file server, i.e., a file storage device with a processor which is specialized to perform file operations, there is no reason why every work station, processor, file storage device, display device, and printer in a large corporation could not be part of a single distributed system.
One problem in the design of distributed systems is how to define the name space. In the distributed computing system described in the Pike et al. patent application cited above, name spaces are defined by processes. A process may have its own name space or share a name space with another process, and a process may modify its name space by rearranging the relationships between names in the name space and by adding file trees provided by services to the name space. A difficulty with the definition of name spaces in the computing system of the Pike et al. patent application was that a first process could not incorporate a portion of a second process's name space into its own name space. As a result, operations such as incorporating the name space of a process executing on a work station into the name space of a process executing on a CPU for the user of the work station were exceedingly cumbersome. This problem is overcome by the techniques disclosed herein, which may be used generally to incorporate a portion of one name space into another name space.